home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Leser 19 / Amiga Plus Leser CD 19.iso / Tools / MorphOS / cvs-1.11.2 / source / amiga / netinclude / netinet / ip_icmp.h < prev    next >
Encoding:
C/C++ Source or Header  |  2002-11-18  |  6.3 KB  |  166 lines

  1. /*
  2.  * Copyright (c) 1982, 1986, 1993
  3.  *    The Regents of the University of California.  All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  * 1. Redistributions of source code must retain the above copyright
  9.  *    notice, this list of conditions and the following disclaimer.
  10.  * 2. Redistributions in binary form must reproduce the above copyright
  11.  *    notice, this list of conditions and the following disclaimer in the
  12.  *    documentation and/or other materials provided with the distribution.
  13.  * 3. All advertising materials mentioning features or use of this software
  14.  *    must display the following acknowledgement:
  15.  *    This product includes software developed by the University of
  16.  *    California, Berkeley and its contributors.
  17.  * 4. Neither the name of the University nor the names of its contributors
  18.  *    may be used to endorse or promote products derived from this software
  19.  *    without specific prior written permission.
  20.  *
  21.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  22.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  25.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31.  * SUCH DAMAGE.
  32.  *
  33.  *    @(#)ip_icmp.h    8.1 (Berkeley) 6/10/93
  34.  */
  35.  
  36. #ifndef _NETINET_IP_ICMP_H
  37. #define _NETINET_IP_ICMP_H
  38.  
  39. #ifndef EXEC_TYPES_H
  40. #include <exec/types.h>
  41. #endif /* EXEC_TYPES_H */
  42.  
  43. #ifndef _NETINET_IP_H
  44. #include <netinet/ip.h>
  45. #endif /* _NETINET_IP_H */
  46.  
  47. /*
  48.  * Interface Control Message Protocol Definitions.
  49.  * Per RFC 792, September 1981.
  50.  */
  51.  
  52. /*
  53.  * Structure of an icmp header.
  54.  */
  55. struct icmp {
  56.     UBYTE    icmp_type;        /* type of message, see below */
  57.     UBYTE    icmp_code;        /* type sub code */
  58.     UWORD    icmp_cksum;        /* ones complement cksum of struct */
  59.     union {
  60.         UBYTE ih_pptr;            /* ICMP_PARAMPROB */
  61.         struct in_addr ih_gwaddr;    /* ICMP_REDIRECT */
  62.         struct ih_idseq {
  63.             UWORD    icd_id;
  64.             UWORD    icd_seq;
  65.         } ih_idseq;
  66.         LONG ih_void;
  67.  
  68.         /* ICMP_UNREACH_NEEDFRAG -- Path MTU Discovery (RFC1191) */
  69.         struct ih_pmtu {
  70.             UWORD ipm_void;    
  71.             UWORD ipm_nextmtu;
  72.         } ih_pmtu;
  73.     } icmp_hun;
  74. #define    icmp_pptr    icmp_hun.ih_pptr
  75. #define    icmp_gwaddr    icmp_hun.ih_gwaddr
  76. #define    icmp_id        icmp_hun.ih_idseq.icd_id
  77. #define    icmp_seq    icmp_hun.ih_idseq.icd_seq
  78. #define    icmp_void    icmp_hun.ih_void
  79. #define    icmp_pmvoid    icmp_hun.ih_pmtu.ipm_void
  80. #define    icmp_nextmtu    icmp_hun.ih_pmtu.ipm_nextmtu
  81.     union {
  82.         struct id_ts {
  83.             ULONG its_otime;
  84.             ULONG its_rtime;
  85.             ULONG its_ttime;
  86.         } id_ts;
  87.         struct id_ip  {
  88.             struct ip idi_ip;
  89.             /* options and then 64 bits of data */
  90.         } id_ip;
  91.         ULONG    id_mask;
  92.         UBYTE    id_data[1];
  93.     } icmp_dun;
  94. #define    icmp_otime    icmp_dun.id_ts.its_otime
  95. #define    icmp_rtime    icmp_dun.id_ts.its_rtime
  96. #define    icmp_ttime    icmp_dun.id_ts.its_ttime
  97. #define    icmp_ip        icmp_dun.id_ip.idi_ip
  98. #define    icmp_mask    icmp_dun.id_mask
  99. #define    icmp_data    icmp_dun.id_data
  100. };
  101.  
  102. /*
  103.  * Lower bounds on packet lengths for various types.
  104.  * For the error advice packets must first insure that the
  105.  * packet is large enought to contain the returned ip header.
  106.  * Only then can we do the check to see if 64 bits of packet
  107.  * data have been returned, since we need to check the returned
  108.  * ip header length.
  109.  */
  110. #define    ICMP_MINLEN    8                /* abs minimum */
  111. #define    ICMP_TSLEN    (8 + 3 * sizeof (ULONG))    /* timestamp */
  112. #define    ICMP_MASKLEN    12                /* address mask */
  113. #define    ICMP_ADVLENMIN    (8 + sizeof (struct ip) + 8)    /* min */
  114. #define    ICMP_ADVLEN(p)    (8 + ((p)->icmp_ip.ip_hl << 2) + 8)
  115.     /* N.B.: must separately check that ip_hl >= 5 */
  116.  
  117. /*
  118.  * Definition of type and code field values.
  119.  */
  120. #define    ICMP_ECHOREPLY        0        /* echo reply */
  121. #define    ICMP_UNREACH        3        /* dest unreachable, codes: */
  122. #define        ICMP_UNREACH_NET    0        /* bad net */
  123. #define        ICMP_UNREACH_HOST    1        /* bad host */
  124. #define        ICMP_UNREACH_PROTOCOL    2        /* bad protocol */
  125. #define        ICMP_UNREACH_PORT    3        /* bad port */
  126. #define        ICMP_UNREACH_NEEDFRAG    4        /* IP_DF caused drop */
  127. #define        ICMP_UNREACH_SRCFAIL    5        /* src route failed */
  128. #define        ICMP_UNREACH_NET_UNKNOWN 6        /* unknown net */
  129. #define        ICMP_UNREACH_HOST_UNKNOWN 7        /* unknown host */
  130. #define        ICMP_UNREACH_ISOLATED    8        /* src host isolated */
  131. #define        ICMP_UNREACH_NET_PROHIB    9        /* prohibited access */
  132. #define        ICMP_UNREACH_HOST_PROHIB 10        /* ditto */
  133. #define        ICMP_UNREACH_TOSNET    11        /* bad tos for net */
  134. #define        ICMP_UNREACH_TOSHOST    12        /* bad tos for host */
  135. #define    ICMP_SOURCEQUENCH    4        /* packet lost, slow down */
  136. #define    ICMP_REDIRECT        5        /* shorter route, codes: */
  137. #define        ICMP_REDIRECT_NET    0        /* for network */
  138. #define        ICMP_REDIRECT_HOST    1        /* for host */
  139. #define        ICMP_REDIRECT_TOSNET    2        /* for tos and net */
  140. #define        ICMP_REDIRECT_TOSHOST    3        /* for tos and host */
  141. #define    ICMP_ECHO        8        /* echo service */
  142. #define    ICMP_ROUTERADVERT    9        /* router advertisement */
  143. #define    ICMP_ROUTERSOLICIT    10        /* router solicitation */
  144. #define    ICMP_TIMXCEED        11        /* time exceeded, code: */
  145. #define        ICMP_TIMXCEED_INTRANS    0        /* ttl==0 in transit */
  146. #define        ICMP_TIMXCEED_REASS    1        /* ttl==0 in reass */
  147. #define    ICMP_PARAMPROB        12        /* ip header bad */
  148. #define        ICMP_PARAMPROB_OPTABSENT 1        /* req. opt. absent */
  149. #define    ICMP_TSTAMP        13        /* timestamp request */
  150. #define    ICMP_TSTAMPREPLY    14        /* timestamp reply */
  151. #define    ICMP_IREQ        15        /* information request */
  152. #define    ICMP_IREQREPLY        16        /* information reply */
  153. #define    ICMP_MASKREQ        17        /* address mask request */
  154. #define    ICMP_MASKREPLY        18        /* address mask reply */
  155.  
  156. #define    ICMP_MAXTYPE        18
  157.  
  158. #define    ICMP_INFOTYPE(type) \
  159.     ((type) == ICMP_ECHOREPLY || (type) == ICMP_ECHO || \
  160.     (type) == ICMP_ROUTERADVERT || (type) == ICMP_ROUTERSOLICIT || \
  161.     (type) == ICMP_TSTAMP || (type) == ICMP_TSTAMPREPLY || \
  162.     (type) == ICMP_IREQ || (type) == ICMP_IREQREPLY || \
  163.     (type) == ICMP_MASKREQ || (type) == ICMP_MASKREPLY)
  164.  
  165. #endif /* _NETINET_IP_ICMP_H */
  166.